﻿using System;

using OpenTK.Graphics.OpenGL;

namespace MosCraft.Graphics
{
    public static class OpenGLHelper
    {
        public static void initOpenGL()
        {
            GL.Enable(EnableCap.Texture2D);
            GL.ShadeModel(ShadingModel.Smooth);
            GL.ClearDepth(1.0D);

            GL.Enable(EnableCap.DepthTest);
            GL.DepthFunc(DepthFunction.Lequal);

            GL.Enable(EnableCap.AlphaTest);
            GL.AlphaFunc(AlphaFunction.Greater, 0.1F);

            GL.CullFace(CullFaceMode.Back);
            GL.MatrixMode(MatrixMode.Projection);

            GL.LoadIdentity();
            GL.MatrixMode(MatrixMode.Modelview);
        }

        public static void initOverlayRendering()
        {
            GL.Disable(EnableCap.Fog);

            GL.Clear(ClearBufferMask.DepthBufferBit);
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();

            GL.Ortho(0, MosCraft.clientWidth, MosCraft.clientHight, 0, -100, 100);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();

            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

            GL.Enable(EnableCap.ColorMaterial);
            GL.Enable(EnableCap.AlphaTest);
            GL.Disable(EnableCap.CullFace);
            GL.Disable(EnableCap.DepthTest);
        }

        public static void initSceneRendering()
        {
            GL.Disable(EnableCap.Blend);
            GL.Enable(EnableCap.DepthTest);
            GL.DepthFunc(DepthFunction.Lequal);
            GL.Enable(EnableCap.CullFace);

            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();

            //GL.Enable(EnableCap.Fog);
        }

        public static void renderTransculentOverlayLayer()
        {
            GL.Color4(0.0f, 0.0f, 0.0f, 0.4f);
            GL.Disable(EnableCap.Texture2D);
            GL.Begin(BeginMode.Quads);
            GL.Vertex2(0, 0);
            GL.Vertex2(MosCraft.clientWidth, 0);
            GL.Vertex2(MosCraft.clientWidth, MosCraft.clientHight);
            GL.Vertex2(0, MosCraft.clientWidth);
            GL.End();
        }

    }
}
